//package org.jeecg.common.util.oss;
//
//import com.aliyun.oss.ClientConfiguration;
//import com.aliyun.oss.OSSClient;
//import com.aliyun.oss.common.auth.DefaultCredentialProvider;
//import com.aliyun.oss.model.CannedAccessControlList;
//import com.aliyun.oss.model.OSSObject;
//import com.aliyun.oss.model.PutObjectResult;
//import lombok.extern.slf4j.Slf4j;
//import org.apache.tomcat.util.http.fileupload.FileItemStream;
//import org.jeecg.common.util.CommonUtils;
//import org.jeecg.common.util.filter.FileTypeFilter;
//import org.jeecg.common.util.filter.StrAttackFilter;
//import org.jeecg.common.util.oConvertUtils;
//import org.springframework.web.multipart.MultipartFile;
//
//import java.io.BufferedInputStream;
//import java.io.IOException;
//import java.io.InputStream;
//import java.net.URL;
//import java.net.URLDecoder;
//import java.util.Date;
//import java.util.UUID;
//
///**
// * @Description: 阿里云 oss 上传工具类(高依赖版)
// * @Date: 2019/5/10
// */
//@Slf4j
//public class OssBootUtil {
//
//    private static String endPoint;
//    private static String accessKeyId;
//    private static String accessKeySecret;
//    private static String bucketName;
//    private static String staticDomain;
//
//    public static void setEndPoint(String endPoint) {
//        OssBootUtil.endPoint = endPoint;
//    }
//
//    public static void setAccessKeyId(String accessKeyId) {
//        OssBootUtil.accessKeyId = accessKeyId;
//    }
//
//    public static void setAccessKeySecret(String accessKeySecret) {
//        OssBootUtil.accessKeySecret = accessKeySecret;
//    }
//
//    public static void setBucketName(String bucketName) {
//        OssBootUtil.bucketName = bucketName;
//    }
//
//    public static void setStaticDomain(String staticDomain) {
//        OssBootUtil.staticDomain = staticDomain;
//    }
//
//    public static String getStaticDomain() {
//        return staticDomain;
//    }
//
//    public static String getEndPoint() {
//        return endPoint;
//    }
//
//    public static String getAccessKeyId() {
//        return accessKeyId;
//    }
//
//    public static String getAccessKeySecret() {
//        return accessKeySecret;
//    }
//
//    public static String getBucketName() {
//        return bucketName;
//    }
//
//    public static OSSClient getOssClient() {
//        return ossClient;
//    }
//
//    /**
//     * oss 工具客户端
//     */
//    private static OSSClient ossClient = null;
//
//    /**
//     * 上传文件至阿里云 OSS
//     * 文件上传成功,返回文件完整访问路径
//     * 文件上传失败,返回 null
//     *
//     * @param file    待上传文件
//     * @param fileDir 文件保存目录
//     * @return oss 中的相对文件路径
//     */
//    public static String upload(MultipartFile file, String fileDir,String customBucket) {
//        String FILE_URL = null;
//        initOSS(endPoint, accessKeyId, accessKeySecret);
//        StringBuilder fileUrl = new StringBuilder();
//        String newBucket = bucketName;
//        if(oConvertUtils.isNotEmpty(customBucket)){
//            newBucket = customBucket;
//        }
//        try {
//            //判断桶是否存在,不存在则创建桶
//            if(!ossClient.doesBucketExist(newBucket)){
//                ossClient.createBucket(newBucket);
//            }
//            // 获取文件名
//            String orgName = file.getOriginalFilename();
//            if("" == orgName){
//              orgName=file.getName();
//            }
//            //update-begin-author:liusq date:20210809 for: 过滤上传文件类型
//            FileTypeFilter.fileTypeFilter(file);
//            //update-end-author:liusq date:20210809 for: 过滤上传文件类型
//            orgName = CommonUtils.getFileName(orgName);
//            String fileName = orgName.indexOf(".")==-1
//                              ?orgName + "_" + System.currentTimeMillis()
//                              :orgName.substring(0, orgName.lastIndexOf(".")) + "_" + System.currentTimeMillis() + orgName.substring(orgName.lastIndexOf("."));
//            if (!fileDir.endsWith("/")) {
//                fileDir = fileDir.concat("/");
//            }
//            //update-begin-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符，防止攻击
//            fileDir=StrAttackFilter.filter(fileDir);
//            //update-end-author:wangshuai date:20201012 for: 过滤上传文件夹名特殊字符，防止攻击
//            fileUrl = fileUrl.append(fileDir + fileName);
//
//            if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
//                FILE_URL = staticDomain + "/" + fileUrl;
//            } else {
//                FILE_URL = "https://" + newBucket + "." + endPoint + "/" + fileUrl;
//            }
//            PutObjectResult result = ossClient.putObject(newBucket, fileUrl.toString(), file.getInputStream());
//            // 设置权限(公开读)
////            ossClient.setBucketAcl(newBucket, CannedAccessControlList.PublicRead);
//            if (result != null) {
//                log.info("------OSS文件上传成功------" + fileUrl);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//            return null;
//        }catch (Exception e) {
//            e.printStackTrace();
//            return null;
//        }
//        return FILE_URL;
//    }
//
//    /**
//     * 获取原始URL
//    * @param url: 原始URL
//    * @Return: java.lang.String
//    */
//    public static String getOriginalUrl(String url) {
//        String originalDomain = "https://" + bucketName + "." + endPoint;
//        if(oConvertUtils.isNotEmpty(staticDomain) && url.indexOf(staticDomain)!=-1){
//            url = url.replace(staticDomain,originalDomain);
//        }
//        return url;
//    }
//
//    /**
//     * 文件上传
//     * @param file
//     * @param fileDir
//     * @return
//     */
//    public static String upload(MultipartFile file, String fileDir) {
//        return upload(file, fileDir,null);
//    }
//
//    /**
//     * 上传文件至阿里云 OSS
//     * 文件上传成功,返回文件完整访问路径
//     * 文件上传失败,返回 null
//     *
//     * @param file    待上传文件
//     * @param fileDir 文件保存目录
//     * @return oss 中的相对文件路径
//     */
//    public static String upload(FileItemStream file, String fileDir) {
//        String FILE_URL = null;
//        initOSS(endPoint, accessKeyId, accessKeySecret);
//        StringBuilder fileUrl = new StringBuilder();
//        try {
//            String suffix = file.getName().substring(file.getName().lastIndexOf('.'));
//            String fileName = UUID.randomUUID().toString().replace("-", "") + suffix;
//            if (!fileDir.endsWith("/")) {
//                fileDir = fileDir.concat("/");
//            }
//            fileDir = StrAttackFilter.filter(fileDir);
//            fileUrl = fileUrl.append(fileDir + fileName);
//            if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
//                FILE_URL = staticDomain + "/" + fileUrl;
//            } else {
//                FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl;
//            }
//            PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(), file.openStream());
//            // 设置权限(公开读)
//            ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
//            if (result != null) {
//                log.info("------OSS文件上传成功------" + fileUrl);
//            }
//        } catch (IOException e) {
//            e.printStackTrace();
//            return null;
//        }
//        return FILE_URL;
//    }
//
//    /**
//     * 删除文件
//     * @param url
//     */
//    public static void deleteUrl(String url) {
//        deleteUrl(url,null);
//    }
//
//    /**
//     * 删除文件
//     * @param url
//     */
//    public static void deleteUrl(String url,String bucket) {
//        String newBucket = bucketName;
//        if(oConvertUtils.isNotEmpty(bucket)){
//            newBucket = bucket;
//        }
//        String bucketUrl = "";
//        if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
//            bucketUrl = staticDomain + "/" ;
//        } else {
//            bucketUrl = "https://" + newBucket + "." + endPoint + "/";
//        }
//        url = url.replace(bucketUrl,"");
//        ossClient.deleteObject(newBucket, url);
//    }
//
//    /**
//     * 删除文件
//     * @param fileName
//     */
//    public static void delete(String fileName) {
//        ossClient.deleteObject(bucketName, fileName);
//    }
//
//    /**
//     * 获取文件流
//     * @param objectName
//     * @param bucket
//     * @return
//     */
//    public static InputStream getOssFile(String objectName,String bucket){
//        InputStream inputStream = null;
//        try{
//            String newBucket = bucketName;
//            if(oConvertUtils.isNotEmpty(bucket)){
//                newBucket = bucket;
//            }
//            initOSS(endPoint, accessKeyId, accessKeySecret);
//            OSSObject ossObject = ossClient.getObject(newBucket,objectName);
//            inputStream = new BufferedInputStream(ossObject.getObjectContent());
//        }catch (Exception e){
//            log.info("文件获取失败" + e.getMessage());
//        }
//        return inputStream;
//    }
//
//    /**
//     * 获取文件流
//     * @param objectName
//     * @return
//     */
//    public static InputStream getOssFile(String objectName){
//        return getOssFile(objectName,null);
//    }
//
//    /**
//     * 获取文件外链
//     * @param bucketName
//     * @param objectName
//     * @param expires
//     * @return
//     */
//    public static String getObjectURL(String bucketName, String objectName, Date expires) {
//        initOSS(endPoint, accessKeyId, accessKeySecret);
//        try{
//            if(ossClient.doesObjectExist(bucketName,objectName)){
//                URL url = ossClient.generatePresignedUrl(bucketName,objectName,expires);
//                return URLDecoder.decode(url.toString(),"UTF-8");
//            }
//        }catch (Exception e){
//            log.info("文件路径获取失败" + e.getMessage());
//        }
//        return null;
//    }
//
//    /**
//     * 初始化 oss 客户端
//     *
//     * @return
//     */
//    private static OSSClient initOSS(String endpoint, String accessKeyId, String accessKeySecret) {
//        if (ossClient == null) {
//            ossClient = new OSSClient(endpoint,
//                    new DefaultCredentialProvider(accessKeyId, accessKeySecret),
//                    new ClientConfiguration());
//        }
//        return ossClient;
//    }
//
//
//    /**
//     * 上传文件到oss
//     * @param stream
//     * @param relativePath
//     * @return
//     */
//    public static String upload(InputStream stream, String relativePath) {
//        String FILE_URL = null;
//        String fileUrl = relativePath;
//        initOSS(endPoint, accessKeyId, accessKeySecret);
//        if (oConvertUtils.isNotEmpty(staticDomain) && staticDomain.toLowerCase().startsWith("http")) {
//            FILE_URL = staticDomain + "/" + relativePath;
//        } else {
//            FILE_URL = "https://" + bucketName + "." + endPoint + "/" + fileUrl;
//        }
//        PutObjectResult result = ossClient.putObject(bucketName, fileUrl.toString(),stream);
//        // 设置权限(公开读)
//        ossClient.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
//        if (result != null) {
//            log.info("------OSS文件上传成功------" + fileUrl);
//        }
//        return FILE_URL;
//    }
//
//
//}